package com.itheima.window;

public class LeetCode1423 {
    //几张卡牌 排成一行，每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。
    //
    //每次行动，你可以从行的开头或者末尾拿一张卡牌，最终你必须正好拿 k 张卡牌。
    //
    //你的点数就是你拿到手中的所有卡牌的点数之和。
    //
    //给你一个整数数组 cardPoints 和整数 k，请你返回可以获得的最大点数。

    public int maxScore(int[] cardPoints, int k) {
        int sum = 0;
        int max = 0;
        int length = cardPoints.length;

        //排除脏数据虽然好像这题没有这样的实例
        if(cardPoints.length < k ){
            return -1;
        }
        //初始化窗口
        for (int i = 0; i < k; i++) {
            sum += cardPoints[i];
        }
        max = sum;
        sum -= cardPoints[k-1];
        //开始移动窗口
        for (int i = 0; i < k-1; i++) {
            sum += cardPoints[length - i - 1];
            max = Math.max(max,sum);
            sum -= cardPoints[k - i-2];
        }
        sum += cardPoints[length - k];
        max = Math.max(max,sum);
        return max;
    }
}
